// Tencent is pleased to support the open source community by making ncnn available.
//
// Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.
//
// Licensed under the BSD 3-Clause License (the "License"); you may not use this file except
// in compliance with the License. You may obtain a copy of the License at
//
// https://opensource.org/licenses/BSD-3-Clause
//
// Unless required by applicable law or agreed to in writing, software distributed
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

package com.tencent.yolov8ncnn;

import android.content.res.AssetManager;
import android.util.Log;
import android.view.Surface;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;

public class Yolov8Ncnn
{
    private OnCameraFrameListener listener;
    public native boolean loadModel(AssetManager mgr, int modelid, int cpugpu);
    public native boolean openCamera(int facing, int width, int height);
    public native boolean closeCamera();
    public native boolean setOutputWindow(Surface surface);

    public native boolean startRecord(String dir_path, String video_path);

    public native boolean stopRecord();

    public void onCameraFrame(byte[] data) {
        if (listener != null) {
            listener.onCameraFrame(data);
        }
    }

    public void saveYoloData(String json, String dir_path){
//        YoloData yoloData = GsonUtil.json2Bean(json, YoloData.class);


        FileOutputStream fos = null;
//        try {
//            fos = new FileOutputStream(yoloData.getImg_path());
//            fos.write(data);
//            System.out.println("图片已保存到：‌" + yoloData.getImg_path());
//        } catch (IOException e) {
//            System.err.println("保存图片时发生错误：‌" + e.getMessage());
//        }finally {
//            try {
//                if (fos != null) {
//                    fos.close();
//                }
//            } catch (IOException e) {
//                throw new RuntimeException(e);
//            }
            BufferedWriter bw = null;
            try  {
                String path = FileDir.getLogPath(dir_path);
                bw = new BufferedWriter(new FileWriter(path, true));
                bw.write(json);
                bw.newLine();
                bw.flush();
                System.err.println("日志已保存：‌" + path);
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if (bw != null) {
                    try {
                        bw.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
//        }
    }

    public void setListener(OnCameraFrameListener listener) {
        this.listener = listener;
    }

    static {
        System.loadLibrary("yolov8ncnn");
    }

    public interface OnCameraFrameListener {
        void onCameraFrame(byte[] data);
    }
}
